/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mireille.learning.devoir1;

import java.util.Scanner;
import mireille.learning.devoir1.Exceptions.CompteException;
import mireille.learning.devoir1.Exceptions.DebitNonAutoriseException;
import mireille.learning.devoir1.Exceptions.ErreurTypeDeCompteException;
import mireille.learning.devoir1.Exceptions.OperationPourCrediterNonAutoriseException;
import mireille.learning.devoir1.utility.GestionBancaireUtility;

/**
 * Cette classe permet d'interagir avec l'utilisateur de la fenêtre de la
 * console. Dans cette classe, nous allons capturer les exceptions et appliquer
 * les traitements spécifiques.
 *
 * @author Mireille
 */
public class GestionAgenceBis {

    public static void main(String[] args) throws DebitNonAutoriseException, OperationPourCrediterNonAutoriseException {

        AgenceBancaire ab = new AgenceBancaire(); //création d'un objet de type AgenceBancaire
        String nom = "";
        String adresse = "";
        String operationAEffectuer = "";
        Scanner sc = new Scanner(System.in);

        System.out.println("BIENVENUE DANS LE PROGRAMME DE GESTION DES COMPTES BANCAIRES !");
        System.out.println("*******CRÉATION DES COMPTES BANCAIRES*******");
        do {
            try {
                System.out.println("Saisir le nom du titulaire (N.B. La lettre \"q\" indique que l'utilisateur ne souhaite plus créer de compte): ");
                nom = sc.nextLine();
                if (GestionBancaireUtility.isStringContainsNumber(nom)) {
                    throw new CompteException("IL NOME NON DEVE CONTENERE NUMERI");
                }

                if (!"q".equals(nom)) {//si le nom est différent de la lettre "q"
                    System.out.println("Saisir l'adresse du titulaire du compte : ");
                    adresse = sc.nextLine();

                    while (true) { //dans ce cas, while è toujours vrai au départ
                        System.out.println("Entrer \"C\" pour créer un compte courant et \"E\" pour créer un compte d'épargne : ");
                        try {
                            String typeDeCompte = sc.next();
                            ab.ajouterCompte(typeDeCompte, nom, adresse);
                            sc.nextLine();

                        } catch (ErreurTypeDeCompteException ex) {
                            System.out.println("ERROR: " + ex.getMessage());
                            sc.nextLine();
                            continue; //le cycle recommence à la ligne 38
                        }

                        break;
                    }
                }
            } catch (CompteException ex) {
                System.out.println("ERROR: " + ex.getMessage());
            }
        } while (!"q".equals(nom));
        System.out.println("*****LISTE DE TOUS LES COMPTES CRÉÉS DANS L'AGENCE*****");
        ab.ensembleComptes();
        System.out.println("*****OPERATIONS SUR LES DIFFàERENTS COMPTES QUI ONT ÉTÉ CRÉÉS*****");

        do {
            System.out.println("Saisir la lettre D pour débiter, C pour créditer et F pour quitter l'application");
            operationAEffectuer = sc.next();
            if ("D".equals(operationAEffectuer)) {
                try {
                    System.out.println("Quel è le numéro de compte sur lequel vous souhaiter débiter le montant ?");
                    int numero = sc.nextInt();
                    System.out.println("Combien souhaitez-vous débiter sur le compte numéro " + numero + " ? ");
                    double montant = sc.nextDouble();

                    ab.debiterSurLeCompte(numero, montant);
                    System.out.println("  -- Operazione svolta con successo !  --");
                } catch (DebitNonAutoriseException ex) {
                    System.out.println("ERROR: " + ex.getMessage());
                    sc.nextLine();
                    continue;
                } catch (java.util.InputMismatchException ex) {
                    System.out.println("ERROR: il formato dell'input non è stato correttamente inserito");
                    sc.nextLine();
                    continue;
                }

            } else if ("C".equals(operationAEffectuer)) {
                try {
                    System.out.println("Quel è le numéro de compte sur lequel vous souhaiter créditer le montant ?");
                    int numero = sc.nextInt();
                    System.out.println("Combien souhaitez-vous créditer sur le compte numéro " + numero + " ? ");
                    double montant = sc.nextDouble();

                    ab.crediterSurLeCompte(numero, montant);
                    System.out.println("  -- Operazione svolta con successo !  --");
                } catch (OperationPourCrediterNonAutoriseException ex) {
                    System.out.println("ERROR: il formato dell'input non è stato correttamente inserito");
                    continue;
                } catch (java.util.InputMismatchException ex) {
                    System.out.println("ERROR: il formato dell'input non è stato correttamente inserito");
                    sc.nextLine();
                    continue;
                }

            } else if ("F".equals(operationAEffectuer)) {
                break;
            }
        } while (!"F".equals(operationAEffectuer));
        System.out.println("LISTE DE TOUS LES COMPTES APRÈS AVOIR EFFECTUER DES OPÉRATIONS POUR DÉBITER OU CRÉDITER");
        ab.ensembleComptes();
    }
}
